home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -coverdisks- / 126a / football / user / endofseason.rexx < prev    next >
OS/2 REXX Batch file  |  1999-05-22  |  20KB  |  678 lines

  1. /* ***********************************************************************
  2.  
  3.    END OF SEASON PROGRAM FOR FOOTBALL REXX SUITE
  4.   -----------------------------------------------
  5.                    Copyright  Mark Naughton 1997
  6.  
  7.  
  8. Version    Date     History
  9. --------------------------------------------------------------------------
  10.  1.0       061097   First release - after about 10 days and loads of
  11.                     hassle and numerous variations in the method for
  12.                     swapping/deleting teams between divisions.
  13.  
  14. **************************************************************************
  15.  
  16. Procedure
  17. ---------
  18.  
  19. 1. Check files exist.
  20. 2. Read number of divisions and divisions. Then store.
  21. 3. Search all leagues/divisions to see if all matches have been played,
  22.    if not, then give error and exit.
  23. 4. Create all league/division tables and save to temporary files.
  24. 5. Display the winner, teams relegated and teams promoted for each
  25.    division.
  26. 6. Loop. Read teams from division then swap/delete those teams that have
  27.    been relegated/promoted between adjoining leagues/divisions. Write to
  28.    temporary file when complete. End loop.
  29. 7. Loop. Read previous '.df' file and using data from temporary files
  30.    created in (6), create '_NewData.df' files for each league/division.
  31.    End loop.
  32. 8. Display message about '_NewData.df' files.
  33. 9. Display final league/division tables.
  34. 10.Erase temporary files. Exit.
  35.  
  36. ************************************************************************** */
  37. PARSE ARG league_stuff
  38.  
  39. version      = 1
  40. input_file   = '.df'
  41. input2_file  = '.sf'
  42. league_file  = "Data/" || league_stuff
  43. stored_divs. = '???'
  44. league_title = '*LEAGUE_NAME='
  45. num_divs     = '*NUM_DIVISIONS='
  46. divisions    = '*DIVISIONS='
  47. releg        = '*RELEGATION='
  48. promoted     = '*PROMOTED='
  49. not_played   = '__   __'
  50. ndivs        = 1
  51. divs         = ''
  52. promo        = 0
  53. relg         = 2
  54. separator    = '*'
  55.  
  56. defcts.      = '???'
  57. titles.      = '???'
  58. names.       = '???'
  59. defs.        = '???'
  60. div1.        = '???'
  61.  
  62.  
  63. if exists(league_file || input_file) = 0  then exit
  64. if exists(league_file || input2_file) = 0 then exit
  65.  
  66.  
  67. if open(datafile,league_file || input_file,'r') then do
  68.    do while ~eof(datafile)
  69.       line = readln(datafile)
  70.       if pos(num_divs,line) > 0 then     ndivs = delstr(line,1,15)
  71.       if pos(divisions,line) > 0 then    divs  = delstr(line,1,11)
  72.    end
  73.    close(datafile)
  74. end
  75. else do
  76.    say
  77.    say "ERROR :    (EndOfSeason)"
  78.    say
  79.    say "Unable to open '"league_file || input_file"' file."
  80.    exit
  81. end
  82.  
  83. stored_divs.1 = league_file
  84.  
  85. do i=2 to ndivs
  86.    stored_divs.i = "Data/"||word(divs,i-1)
  87. end
  88.  
  89. access = "NONE"
  90. do i=1 to ndivs
  91.    if open(datafile,stored_divs.i || input2_file,'r') then do
  92.       do while ~eof(datafile)
  93.          line = readln(datafile)
  94.          if pos(not_played,line) > 0 then do
  95.             access = stored_divs.i
  96.             leave
  97.          end
  98.       end
  99.       close(datafile)
  100.    end
  101.    if pos("NONE",access) = 0 then do
  102.       say "League '"access"' has not finished. Enter the scores then"
  103.       say "run this program again to close the season."
  104.       exit
  105.    end
  106.    access = "NONE"
  107. end
  108.  
  109. /* All matches have been played in the league, so the program continues... */
  110.  
  111.                                 /* create league tables */
  112. do i=1 to ndivs
  113.    call create_table(stored_divs.i)
  114. end
  115.                               /* print title and winners/losers */
  116. say
  117. say "                                End Of Season"
  118. say "                               ---------------"
  119. say
  120. say
  121. defcnt = 0
  122. do i=1 to ndivs
  123.    if open(datafile,stored_divs.i || input_file,'r') then do
  124.       do while ~eof(datafile)
  125.          line = readln(datafile)
  126.          if pos(league_title,line) > 0 then  title = delstr(line,1,13)
  127.          if pos(releg,line) > 0 then         relg  = delstr(line,1,12)
  128.          if pos(promoted,line) > 0 then      promo = delstr(line,1,10)
  129.       end
  130.       close(datafile)
  131.    end
  132.    else do
  133.       say
  134.       say "ERROR :    (EndOfSeason)"
  135.       say
  136.       say "Unable to open '"stored_divs.i || input_file"' file."
  137.       exit
  138.    end
  139.  
  140.    parse var stored_divs.i . "/" name .
  141.    a = 0
  142.    if open(datafile,"RAM:"||name||".final_table",'r') then do
  143.       do while ~eof(datafile)
  144.          line = readln(datafile)
  145.          a = a + 1
  146.          div1.a = line
  147.       end
  148.       close(datafile)
  149.    end
  150.    else do
  151.       say
  152.       say "ERROR :    (EndOfSeason)"
  153.       say
  154.       say "Unable to open 'RAM:"name".final_table' file."
  155.       exit
  156.    end
  157.    say "           League    : "title
  158.    titles.i = title
  159.    say
  160.    defcnt = defcnt + 1
  161.    if i=1 then do
  162.       say "           Winner    : "substr(div1.1,1,35)
  163.       defs.defcnt = name" WINR "trim(substr(div1.1,1,35))
  164.    end
  165.    else do
  166.       do b=1 to promo
  167.          if b=1 then do
  168.             say "           Promoted  : "substr(div1.b,1,35)
  169.             defs.defcnt = name" PROM * "trim(substr(div1.b,1,35))
  170.          end
  171.          else do
  172.             say "                       "substr(div1.b,1,35)
  173.             defs.defcnt = defs.defcnt" * "trim(substr(div1.b,1,35))
  174.          end
  175.       end
  176.    end
  177.    defcnt = defcnt + 1
  178.    say
  179.    start= a - relg         /* was start+1 */
  180.    do b = start to a
  181.       if b = start then do
  182.          say "           Relegated : "substr(div1.b,1,35)
  183.          defs.defcnt = name" RELG * "trim(substr(div1.b,1,35))
  184.       end
  185.       else do
  186.          say "                       "substr(div1.b,1,35)
  187.          defs.defcnt = defs.defcnt" * "trim(substr(div1.b,1,35))
  188.       end
  189.    end
  190.    say
  191.    say
  192. end
  193.  
  194. say "                             ---------------------"
  195.  
  196. /* swap/delete teams between divisions, write new files */
  197.  
  198. do i=1 to ndivs
  199.    parse var stored_divs.i . "/" name .           /* read teams into memory */
  200.    n = 0
  201.    if open(datafile,"RAM:"||name||".final_table",'r') then do
  202.       do while ~eof(datafile)
  203.          line = readln(datafile)
  204.          n = n + 1
  205.          div1.n = trim(substr(line,1,35))
  206.       end
  207.       close(datafile)
  208.    end
  209.    else do
  210.       say
  211.       say "ERROR :    (EndOfSeason)"
  212.       say
  213.       say "Unable to open 'RAM:"name".final_table' file."
  214.       exit
  215.    end
  216.  
  217.    b = 0
  218.    do a=1 to defcnt
  219.       if pos(name,defs.a) = 0 then
  220.          iterate
  221.       if pos("RELG",defs.a) > 0 then do         /* Check for relegation code */
  222.          b = a + 1
  223.          if pos("PROM",defs.b) = 0 then do
  224.             do m=1 to n
  225.                if pos(div1.m,defs.a) > 0 then         /* delete relegated teams */
  226.                   div1.m = "Deleted Team"
  227.             end
  228.          end
  229.          else do
  230.             do m=1 to n
  231.                if pos(div1.m,defs.a) > 0 then          /* delete relegated teams... */
  232.                   div1.m = "Deleted Team"
  233.             end
  234.             parse var defs.b . "* " names.1 " * " names.2 " * " names.3 " * " names.4 " * " names.5 " * " names.6 " *"
  235.             c = 1
  236.             if div1.n = '' then
  237.                n = n - 1
  238.             do while names.c ~=''           /* ...then add the newly promoted ones! */
  239.                n = n + 1
  240.                div1.n = names.c
  241.                c = c + 1
  242.             end
  243.          end
  244.          if open(datafile2,"RAM:"word(defs.a,1)".teams",'w') then do
  245.             do p=1 to n
  246.                if pos("Deleted Team",div1.p) = 0 then       /* create teams file in RAM: */
  247.                   writeln(datafile2,div1.p)
  248.             end
  249.             close(datafile2)
  250.          end
  251.          else do
  252.             say
  253.             say "ERROR :    (EndOfSeason)"
  254.             say
  255.             say "Cannot write to 'RAM:"word(defs.a,1)".teams'."
  256.             exit
  257.          end
  258.       end
  259.       else do
  260.          if pos("PROM",defs.a) > 0 then do         /* Check for promotion code */
  261.             b = a - 1
  262.             if b=0 then
  263.                iterate
  264.             if pos("RELG",defs.b) = 0 then do
  265.                do m=1 to n
  266.                   if pos(div1.m,defs.a) > 0 then   /* delete promoted teams */
  267.                      div1.m = "Deleted Team"
  268.                end
  269.             end
  270.             else do
  271.                do m=1 to n                           /* delete promoted teams... */
  272.                   if pos(div1.m,defs.a) > 0 then
  273.                      div1.m = "Deleted Team"
  274.                end
  275.                parse var defs.b